package pl.uz.zgora.plan;

import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Iterator;

import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.database.SQLException;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TimeTableActivity extends Activity{

	private ArrayList<Przedmiot> przedmioty = null;
	private LinearLayout layout = null;
	/** Pozycja na liście, zajęć które zostały kliknięte */
	private static Integer selectedClass = -1;
	PlanUzDataSource planDataSource = null;
	
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        drawUI();
	}
	
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
	                                ContextMenuInfo menuInfo) {
	    super.onCreateContextMenu(menu, v, menuInfo);
	    
	    menu.setHeaderTitle("Informacje");
	    MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.class_menu, menu);
	    
	    // Ilość zajęć na liście
	    int classNumber = layout.getChildCount();
	    for(int i = 0; i < classNumber; i++) {
	    	if(v.equals(layout.getChildAt(i))) {
	    		selectedClass = i;
	    		break;
	    	}
	    }
	}
	
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		
		if(selectedClass < 0) {
			return super.onContextItemSelected(item);
		}
	    final Przedmiot przedmiot = przedmioty.get(selectedClass);
	    
	    switch (item.getItemId()) {
	    case R.id.notes:
	    {
	    	String notes = przedmiot.getUwagi();
	    	Intent intent = new Intent(this, SubjectNotesActivity.class);
	    	intent.putExtra("uwagi", notes);
	    	startActivity(intent);
	    	return true;
	    } 
	    
	    case R.id.building:
	    {
	    	Sala sala = przedmiot.getSala(this);
	    	Intent intent = new Intent(this, BuildingViewActivity.class);
	    	intent.putExtra("budynek", sala.getSymbolBudynku());
	    	startActivity(intent);
	    	return true;
	    }
	    case R.id.teacher:
	    {
	    	Nauczyciel n = przedmiot.getNauczyciel(this);
	    	String nazwa = n.getNazwa();
	    	String[] parts = nazwa.split(",");
	    	parts = parts[0].split("\\s");
	    	String nazwisko = new String( parts[parts.length - 1] );
	    	String imie = parts[parts.length - 2];
	    	try {
	    	PersDataSource ds = new PersDataSource(this);
	    	Integer id = 0;
			
				id = ds.getTeacherID(imie, nazwisko);
				Intent intent = new Intent(this, NauczycielViewActivity.class);
		    	intent.putExtra("id", id);
		    	intent.putExtra("nazwa", imie + " " + nazwisko);
		    	startActivity(intent);
				return true;
			} catch (SQLException e) {
				Dialog errorDialog = HelperMethodsManager.getErrorDialog(this, e.getLocalizedMessage(), this);
				errorDialog.setTitle("SQLException");
				errorDialog.show();
			} catch (IOException e) {
				Dialog errorDialog = HelperMethodsManager.getErrorDialog(this, e.getLocalizedMessage(), this);
				errorDialog.setTitle("IOException");
				errorDialog.show();
			}
			return false;
	    }
         
	        default:
	            return super.onContextItemSelected(item);
	    }
	}
	
	public void drawUI() {
		final String day = getIntent().getStringExtra("day");
		final Boolean weekView = getIntent().getBooleanExtra("weekview", true);
		
		planDataSource = new PlanUzDataSource(this);
	    
        layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        
        final LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		if (inflater != null) {

			try {
				przedmioty = planDataSource.readPrzedmioty(day, weekView);
			} catch (SQLException e) {
				Dialog errorDialog = HelperMethodsManager.getErrorDialog(this, e.getLocalizedMessage(), this);
				errorDialog.setTitle("SQLException");
				errorDialog.show();
			} catch (ParseException e) {
				Dialog errorDialog = HelperMethodsManager.getErrorDialog(this, e.getLocalizedMessage(), this);
				errorDialog.setTitle("ParseException");
				errorDialog.show();
			}

			Iterator<Przedmiot> iterator = przedmioty.iterator();
			// Numer wiersza {0, 1}
			Integer rowCount = 0;
			Integer todaysClassNumber = 0;
			while (iterator.hasNext()) {
				final Przedmiot przedmiot = iterator.next();
				final LinearLayout timeTableItem = (LinearLayout) inflater
						.inflate(R.layout.timetable_item, null);

				if (rowCount == 0) {
					timeTableItem.setBackgroundDrawable(getResources()
							.getDrawable(R.drawable.gray_gradient));
				} else {
					timeTableItem.setBackgroundDrawable(getResources()
							.getDrawable(R.drawable.lightgray_gradient));

				}

				registerForContextMenu(timeTableItem);

				layout.addView(timeTableItem);

				// Godzina rozpoczęcia
				TextView tv = (TextView) timeTableItem
						.findViewById(R.id.startTime);
				tv.setText(przedmiot.getGodzinaRozpoczecia());

				// Nazwa przedmiotu
				tv = (TextView) timeTableItem.findViewById(R.id.className);
				tv.setText(przedmiot.getNazwa());

				// Podgrupa
				tv = (TextView) timeTableItem.findViewById(R.id.subgroup);
				if (!przedmiot.getPodgrupa().equals("")) {
					tv.setVisibility(View.VISIBLE);
					tv.setText(przedmiot.getPodgrupa());
				} else {
					tv.setVisibility(View.GONE);
				}

				// Godzina zakończenia
				tv = (TextView) timeTableItem.findViewById(R.id.endTime);
				tv.setText(przedmiot.getGodzinaZakonczenia());

				// Rodzaj zajęć
				tv = (TextView) timeTableItem.findViewById(R.id.classType);
				tv.setText(przedmiot.getRodzajZajec());

				Sala sala = przedmiot.getSala(this);

				// Sala
				tv = (TextView) timeTableItem.findViewById(R.id.classNumber);
				tv.setText(sala.getNazwa().trim());

				// Budynek
				tv = (TextView) timeTableItem.findViewById(R.id.building);
				tv.setText(sala.getSymbolBudynku().trim());

				Nauczyciel nauczyciel = przedmiot.getNauczyciel(this);

				// Wykładowca
				tv = (TextView) timeTableItem.findViewById(R.id.teacher);
				tv.setText(nauczyciel.getNazwa());

				rowCount++;
				rowCount = rowCount % 2;
				todaysClassNumber++;
			}

			if (todaysClassNumber == 0) { // Dzisiaj brak zajęć
				ImageView iv = new ImageView(this);
				iv.setImageDrawable(getResources().getDrawable(R.drawable.happy));
				layout.addView(iv);
				
				TextView tv = new TextView(this);
				tv.setText("Dzisiaj brak zajęć");
				tv.setGravity(Gravity.CENTER);
				tv.setTextAppearance(this, android.R.style.TextAppearance_Large);
				layout.addView(tv);
			}
		}
		setContentView(layout);
	}
}
